from langChain.agents import AgentExecutor
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
from langchain_core.messages import HumanMessage
import os
from langgraph.prebuilt import chat_agent_executor
from langChain.config import model
from langchain_tavily import TavilySearch

os.environ["TAVILY_API_KEY"] = "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"

# # # 1.无代理的回答
# print('不调用工具，LLM自己回答 ：', model.invoke([HumanMessage(content="合肥天气怎么样")]))
# print('================================================')


# # 2. 使用搜索工具回答，需执行 pip install langchain-tavily
# # Langchain 内置了可以使用 Tavily 搜索引擎的工具
# search = TavilySearch(max_results=2)  # 搜索结果最多2条
# print('使用内置工具回答 ：', search.invoke("合肥天气怎么样?"))
# print('================================================')

# # 3.创建工具链
# search = TavilySearch(max_results=2)
# tools = [search]
# # 模型绑定工具
# model_with_tool = model.bind_tools(tools)
# # 模型可以自动推理：是否需要调用工具来回答用户的问题,resp 其实是指令
# # 1.模型直接回答的
# resp1 = model_with_tool.invoke([HumanMessage(content="中国的首都是哪里?")])
# print(f'Model_Result_Content: {resp1.content}')
# print(f'Tools_Result_Content: {resp1.tool_calls}')
# # 2.模型通过工具回答的
# resp2 = model_with_tool.invoke([HumanMessage(content="合肥天气怎么样?")])
# print(f'Model_Result_Content: {resp2.content}')
# print(f'Tools_Result_Content: {resp2.tool_calls}')
# print('================================================')

# 4.创建代理来回答问题
search = TavilySearch(max_results=1)
tools = [search]
# 返回的是一个 Agent 对象，具备调用工具的能力，但尚未与完整的执行器框架集成。
agent = chat_agent_executor.create_tool_calling_executor(model, tools)
# 返回的是一个 AgentExecutor 对象，提供更完整的执行流程控制，内部已经绑定了 Agent 和工具集。
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# resp1 = agent.invoke({'messages': [HumanMessage(content="中国的首都是哪里?")]})
# print('工具代理回答：', len(resp1['messages']), resp1['messages'])
